/**
 *
 * @param {date} date (new Date())
 * @param {string} fmt yyyy-MM-dd
 */
export function formatDate(date, fmt) {
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  const o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  }
  for (const k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      const str = o[k] + ''
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str))
    }
  }
  return fmt
}
/**
 * 时间格式化
 * @param {*} date Date对象 或 时间戳
 * @param {*} fmt "yyyy-MM-dd hh:mm:ss"
 */
export function formatTime(date, fmt = 'yyyy-MM-dd') {
  if (!date) return date
  if (!(date instanceof Date)) {
    const int = parseInt(date)
    // 非13位的数字不转换
    const len = int.toString().length
    if (len !== 13) return date
    // 转为 Date 对象
    date = new Date(int)
  }
  var o = {
    'M+': date.getMonth() + 1, // 月份
    'd+': date.getDate(), // 日
    'h+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'q+': Math.floor((date.getMonth() + 3) / 3) // 季度
  }
  // 格式化年
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(
      RegExp.$1,
      (date.getFullYear() + '').substr(4 - RegExp.$1.length)
    )
  }
  // 格式化毫秒
  if (/(S+)/.test(fmt)) {
    const tmp = date.getMilliseconds()
    fmt = fmt.replace(
      RegExp.$1,
      ('000' + tmp).substr(('' + tmp).length)
    )
  }
  // 格式化其它
  for (var k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
      )
    }
  }
  return fmt
}
function padLeftZero(str) {
  return ('00' + str).substr(str.length)
}

// 当前月 +6个月
export function afterMonth(date) {
  if (date == null || date === '' || date === 'Invalid Date') {
    return '--'
  }
  let year = date.getFullYear() // 当前年
  let month = date.getMonth() + 7 // 当前月 +6个月  因为js里month从0开始，所以要加1
  if (month > 12) {
    year++
    month -= 12
  }
  if (month < 10) {
    month = '0' + month
  }
  const date2 = new Date(year, month, 0) // 新的年月
  let day1 = date.getDate() // 当前日
  const day2 = date2.getDate() // 6个月后的日
  if (day1 < 10) {
    day1 = '0' + day1
  }
  if (day1 > day2) { // 防止+6月后没有31天
    day1 = day2
  }
  const afterDate = year + '-' + month + '-' + day1

  return afterDate
}

// 昨天
export function yesterday(date = new Date()) {
  const yesterday = formatDate((new Date(date.getTime() - 24 * 60 * 60 * 1000)), 'yyyy-MM-dd') // 前一天
  return yesterday
}
